package com.spring.mvc.config;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

/**
 * 动态数据源，通过基础Spring的AbstractRoutingDataSource，只需要实现determineCurrentLookupKey方法即可。
 * 由于DynamicDataSource是单例，线程不安全，所以采用ThreadLocal保证线程安全，由DynamicDataSourceHolder完成。
 *
 * @author roger
 * @email 190642964@qq.com
 * @create 2018-02-01 11:09
 **/
public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        // 使用DynamicDataSourceHolder保证线程安全，并且得到当前线程中的数据源key
        return DynamicDataSourceHolder.getDataSourceKey();
    }

}
